package main

import (
	"fmt"
	"strconv"
)

/***
 * golang 来实现组合模式感觉随手都是，毕竟对 struct 来说太通用了
 *
 */
type LoginInfo struct {
	IsLogin bool
}

type User struct {
	name string
	LoginInfo
}

type Admin struct {
	level int
	LoginInfo
}

func main() {
	user := User{name:"老王"}
	user.IsLogin = true

	res := user.name
	if user.IsLogin {
		res += "登录了"
	} else {
		res += "没有登录"
	}
	fmt.Println(res)

	admin := Admin{level:3}
	admin.IsLogin = false
	adminRes := "等级为 " + strconv.Itoa(admin.level) + " 的管理员"
	if admin.IsLogin {
		adminRes += "已经登录了\n"
	} else {
		adminRes += "没有登录\n";
	}
	fmt.Println(adminRes)
}
